package agregacja;

import java.util.*;

import uslugi.*;
import util.StanCywilnyEnum;
import util.WyksztalcenieEnum;

import baza.BazaDanych;

public class KredytyGen {

	public static BazaDanych bd;
	
	private Vector<Kredyt> kredyty;
	private Vector<KredytKlienta> kredytyKlienta;
	
	// rok , SumaPieniedzy
	private SortedMap<Integer, KredytRok> bilanse = new TreeMap<Integer,KredytRok> ();

	
	//ilosc wg wyksztalcenia
	private Map<WyksztalcenieEnum, Integer> wgWyksztalcenia = new HashMap<WyksztalcenieEnum, Integer>();
	
	// ilsc wg stanu cywilnego
	private Map<StanCywilnyEnum, Integer> wgStanuCywilnego = new HashMap<StanCywilnyEnum, Integer>();
	
	public KredytyGen(){
		
		podlaczDoBazy();
		
		
		kredyty = bd.stworzListe("kredyt");
		

		
		kredytyKlienta = bd.stworzListe("kredytKlienta");
		
		zliczajKredyty();
		
	}
	
	
	private void zliczajKredyty(){
		
		for(KredytKlienta kk: kredytyKlienta){
			
			Date dataOtwarcia = kk.getData();
			Calendar calKonto = Calendar.getInstance();
			calKonto.setTime(dataOtwarcia);
			
			int rok = calKonto.get(Calendar.YEAR);

			if(bilanse.containsKey(rok)){
				
				KredytRok kr = bilanse.get(rok);
				kr.aktualizujSume(kk.getKwota());
				kr.dodajJedenKredyt();
				
			} else {
				bilanse.put(rok, new KredytRok(rok, (long)kk.getKwota(), 1));
			}
			
			
			//wg wyksztalcenia
			final WyksztalcenieEnum wkenum = kk.getKlient().getWyksztalcenie();
			if(wgWyksztalcenia.containsKey(wkenum)){			
				wgWyksztalcenia.put(wkenum, wgWyksztalcenia.get(wkenum) + 1);			
			}else {		
				wgWyksztalcenia.put(wkenum, 1);		
			}
			
			
			//wg stanu cywilnego
			final StanCywilnyEnum sce = kk.getKlient().getStanCywilny();
			if(wgStanuCywilnego.containsKey(sce)){			
				wgStanuCywilnego.put(sce, wgStanuCywilnego.get(sce) + 1);			
			}else {		
				wgStanuCywilnego.put(sce, 1);		
			}
			
			
			
			
		}
	
		
	}
	
	
	public Collection<KredytRok> getBilanse(){
		return bilanse.values();
	}
	

	
	private static void podlaczDoBazy(){
		
		bd = new BazaDanych();
		bd.stworzListe("klient");
		
		
	}

	
	public void wyswietlWgWyksztalcenia(){
		
		System.out.println("");
		System.out.println("ILOSC kredytow WG WYKSZTALCENIA");
		for(Map.Entry<WyksztalcenieEnum, Integer> em: wgWyksztalcenia.entrySet()){
			
			System.out.println(em.getKey().getNazwa() + "= " + em.getValue());
			
		}
	}
	
	
	public void wyswietlWgSC(){
		
		System.out.println("");
		System.out.println("ILOSC kredytow WG Stanu cywilnego");
		for(Map.Entry<StanCywilnyEnum, Integer> em: wgStanuCywilnego.entrySet()){
			
			System.out.println(em.getKey().getNazwa() + "= " + em.getValue());
			
		}
	}
	
	
	
	public Map<WyksztalcenieEnum, Integer> getWgWyksztalcenia() {
		return wgWyksztalcenia;
	}

	public Map<StanCywilnyEnum, Integer> getWgStanuCywilnego() {
		return wgStanuCywilnego;
	}

	public static void main (String [] args){
		
		KredytyGen sg = new KredytyGen();
		
		Collection<KredytRok> coll = sg.getBilanse();
		
		for(KredytRok kr: coll){
			System.out.println(kr);
		}

		sg.wyswietlWgWyksztalcenia();
		
		sg.wyswietlWgSC();
	}
	
}
